package com.example.demo.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.demo.mapper.UserPurchaseMapper;
import com.example.demo.pojo.MediaVideo;
import com.example.demo.mapper.MediaVideoMapper;
import com.example.demo.pojo.UserPurchase;
import com.example.demo.service.IMediaVideoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 视频元数据表 服务实现类
 * </p>
 *
 * @author gax
 * @since 2025-09-25
 */
@Service
public class MediaVideoServiceImpl extends ServiceImpl<MediaVideoMapper, MediaVideo> implements IMediaVideoService {
    @Autowired
    private UserPurchaseMapper userPurchaseMapper;

    @Override
    public String getPlayableUrl(Long id, Long userId) {
        // 调用 MP 框架的根据 ID 查询的方法，获取视频对象
        MediaVideo mediaVideo = this.getById(id);
        if (mediaVideo == null) {
            throw new IllegalArgumentException("视频不存在：" + id);
        }
        // 调用 MP 框架，结合 LambdaWrapper 表达式，判断用户是否购买了该视频
        // 直接查询用户购买记录表，通过用户 ID，视频 ID 去判断是否有购买记录即可
        boolean bought = userPurchaseMapper.selectCount(new LambdaQueryWrapper<UserPurchase>()
                .eq(UserPurchase::getUserId, userId)
                .eq(UserPurchase::getVideoId, id)) > 0;
        // 如果存在购买记录，则说明用户购买了，直接返回完整视频在 minIO 文件服务器上的地址
        // 如果不存在购买记录，则说明用户没有购买，则返回预览版视频在 minIO 上的地址
        return bought ? mediaVideo.getFullUrl() : mediaVideo.getPreviewUrl();
    }
}
